03 WPGraphQL query 結構整理與 where 應用
備註
我在 WP graphQL 基本查詢介紹-以頁面查詢為例 有介紹到 wordpress 頁面基本查詢以及使用 Next.js + Apollo client 串接 WPGraphQL,有興趣的各位可以前往瀏覽
這篇文章將更進一步介紹 query 結構,以及整理一些我常用的 query
WPGraphQL 結構介紹
就如同示意圖,WPGraphQL query 的結構對應左側的 Adminmenu
頁面結構 pages
{
pages(where: { name: "home" }) {#這裡填寫你要查詢的頁面代稱
nodes {
# 這裡填寫你要查詢的欄位
content # wordpress 內文編輯器內容
id #頁面 id
link #頁面的永久連結(permalink),是頁面的固定 URL
uri #相對於網站根目錄的路徑
title #頁面標題
acf #額外新增的 ACF 欄位,名稱在 acf 自訂
}
}
}
這裡的 where
代我們想對數據進行過濾的條件
where 常用方法:
- title:頁面名稱
- name:頁面代稱或稱slug
nodes 常用欄位:
- id:頁面 id
- content:wordpress 內文編輯器內容
通常會用 acf 提供的 WYSIWYG Editor 欄位來代替,且我也在 functions.php 隱藏掉頁面預設的 wordrpess 編輯器了
- link:頁面的永久連結(permalink),是頁面的固定 URL
通常用於社群分享的連結會使用永久連結
- uri:相對於網站根目錄的路徑
通常文章
<a/>
連結會使用 uri - title:頁面標題
- date:頁面建立日期
- acf:額外建立的 ACF 欄位也在這邊查詢,acf 名稱可自訂,例如 homeACF
文章結構 posts
以及 posts type
nodes 欄位能查詢到的欄位基本上跟頁面查詢大同小異,需要注意的是 where 的用法,很常用到。這裡的 where
代表我們想對數據進行過濾的條件
{
posts(where) {
nodes {
#這裡基本上跟頁面查詢大同小異
}
}
}
where 常用方法:
名稱 Name | 值 value | 型別 Type | 描述 Description | 注意事項 |
---|---|---|---|---|
notIn | "id" | string | 用於排除特定文章 id | |
orderby | 見下方 | object | 定義了數據的排序方式。 | |
orderby.field | DATE, AUTHOR, ...等等 | 數據用何種方式排序,DATE代表依照時間排列 | ||
orderby.order | ASC, DESC | ASC 升序排列, DESC 降序排列 | ||
offsetPagination | 見下方 | object | 定義了分頁的方式 | 需安裝插件,wp-graphql-offset-pagination |
offsetPagination.size | 0 | number | 每一頁有幾個項目 | |
offsetPagination.offset | 0 | number | 從第幾項開始擷取資料 |
常見的使用方式如下:
{
posts(where:{offsetPagination:{size:6, offset:0}}){
nodes{
content
}
}
}
offsetPagination:{size:6, offset:0}
:
我現在有 24 筆文章,假設每頁有 6 個
- 第一頁就是前 6 個(
offset:0
) - 第二頁就是第 7 個到第 12 個(
offset: 6
) - ... 以此類推